// 1. 实现树形结构, pid就是每个成员的父级
let data = [
  { id: 1, pid: 0 },
  { id: 2, pid: 1 },
  { id: 3, pid: 0 },
  { id: 4, pid: 2 },
];
function fn1(data, pid = 0) {
  let tree = [];
  data.forEach((node) => {
    if (node.pid === pid) {
      let children = fn1(data, node.id);
      if (children.length) {
        node.children = children;
      }
      tree.push(node);
    }
  });
  return tree;
}
console.log(fn1(data));

// 2. 不修改代码的情况下, 实现修改 obj 的内容
const test = (() => {
  let obj = {
    a: '变量a',
    b: '变量b',
  };
  return {
    get: (k) => {
      return obj[k];
    },
  };
})();
console.log(test.get('c'));

// 3. 得出以下结果, 并且说明原因
window.number = 2; // 全局变量number=2
let obj = {
  number: 3, // 局部变量number=3
  db: (function () {
    // this指向的是全局对象window。
    this.number *= 4;
    return function () {
      this.number *= 5;
    };
  })(),
};
let db = obj.db; // 将obj.db赋值给变量db
db(); // this.number*=5中的this指向全局对象window 所以全局的number*5=10
obj.db(); //这次this.number*=5中的this指向的是obj对象 所以obj.number*5=15。
console.log(window.number); // 40 输出全局变量number的值 10*4=40
console.log(obj.number); // 15 输出obj对象属性number的值 15。
